iT邦幫忙

2022 iThome 鐵人賽

DAY 16
0
Software Development

Rails Active Model系列 第 16

D-16 如何讓你的 object 在 console 裡好看一點?

  • 分享至 

  • xImage
  •  

我們稍早前介紹 Active Model 的 object 結構時,有提到由於他並不是我們所熟知的從 DB 叫出來的那種 model,在 console 裡資料的顯示上並不那麽直觀,而是很大一包很亂,怎麼辦?

既然如此,我們自行定義就好囉~。

事實上,Ruby 在 console 裡顯示任何一個 object 時,會先去 call 這個物件的 inspect 方法,然後把這 inspect 的回傳值當作這個物件的樣子 show 出來:

class FakeObject
  # 建一個 class 然後去修改他的 inspect,看看這個物件到頭來會變成什麼樣子
  def inspect
    "<<This is Sparta!!>>"
  end
end

obj = FakeObject.new
 => <<This is Sparta!!>>
# 就會顯示出 This is Sparta!! 的樣子。
obj.class
 => FakeObject
# 但他實際上仍然是這個 FakeObject 物件。

所以回過頭來,如果我們想要我們自己做的 Active Model 可以像一般 model 一樣,直觀簡潔的 show 出每個 attribute 的值,我們也可以這樣做:

class MyClass
  include ActiveModel::Model
  include ActiveModel::Attributes

  attribute :title
  attribute :content

  def inspect
    "#<#{self.class} #{attributes}>"
  end
end

MyClass.new title: '標題唷', content: '內容唷'
 => #<MyClass {"title"=>"標題唷", "content"=>"內容唷"}>

如此重新定義過 inspect 後,在 console 裡面顯示出的樣子就會像是 model 一樣簡潔了!


上一篇
D-15 到底是 true 還是 false? 交給 boolean 轉換器吧!
下一篇
D-17 Active Model errors - 1
系列文
Rails Active Model28
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言